pm2 管理和自动化部署node服务
最近使用了koa写了个简单的接口服务,然后使用了pm2来启动,管理和守护node服务,官网说PM2是一个守护进程管理器,它将帮助您管理并保持应用程序全天候在线。
功能如下:
行为的配置 源映射支持 容器集成 watch和 reload 日志管理 监控 模块系统 最大内存重新加载 集群模式 热重载 开发工作流程 启动脚本 部署工作流程 PAAS兼容 KEYMETRICS监控 API
可以直观的监控所有进程,可以提供微服务支持
安装
我使用的是yarn,推荐使用yarn去管理模块。ps:推荐使用nvm去管理node版本。
yarn global add pm2
yarn -v
常用命令
启动
没有使用webpack等打包工具打包的话,直接使用入口文件即可,koa的项目的index.js
pm2 start 入口文件
可以添加响应的参数,常用的 -- name 指定app名称,-- watch 开启监控
查看服务列表
pm2 list
开启集群模式
pm2 start index.js --name app_name -i max
重启
pm2 restart app_name
重载
pm2 reload app_name
删除
Pm2 delete app_name
暂停
pm2 stop app_name
pm2 -h 可以看到所有命令 常用如下:
start [options] [name|namespace|file|ecosystem|id...] start and daemonize an app
deploy <file|environment> deploy your json
startOrRestart <json> start or restart JSON file
startOrReload <json> start or gracefully reload JSON file
startOrGracefulReload <json> start or gracefully reload JSON file
stop [options] <id|name|namespace|all|json|stdin...> stop a process
restart [options] <id|name|namespace|all|json|stdin...> restart a process
reload <id|name|namespace|all> reload processes (note that its for app using HTTP/HTTPS)
delete|del <name|id|namespace|script|all|json|stdin...> stop and delete a process from pm2 process list
监控
pm2 imonit / monit
日志
pm2 logs ?app_name
更多请看pm2 -h
配置开机自动启动
- 启动服务后,执行保存 pm2 save
- 设置开机自动启动 pm2 startup 平台名称,如:ubuntu
自动化部署
依赖
安装git,开发和部署都安装好git和pm2 nvm node
如果是同时使用gitLab 和GitHub,需要配置一下
然后在gitlab上创建个仓库存放项目代码
生成配置文件
使用如下命令生成配置文件ecosystem.config.js,或者自己手动创建,注意如果多个版本的node环境,需要在执行前制定下使用版本,然后再安装依赖,接着继续编译打包,然后使用配置的是打包后的代码运行,也可以配置个开发的app制定入口文件。
pm2 ecosystem
内容如下:
module.exports = {
apps: [
{
script: "dist/main.js",
watch: "dist",
},
],
deploy: {
production: {
user: "root",
host: "*****",
ref: "origin/master",
repo: "git@******",
path: "/usr/local/***",
"pre-deploy-local": "",
"post-deploy":
"nvm use 14 && yarn install && yarn build && pm2 startOrRestart ecosystem.config.js --env production",
"pre-setup": "",
},
},
};
第一次部署
pm2 deploy production setup
然后输入密码即可
更新项目
当代码变化后,提交到git后,自动执行下以下命令即可自动部署到制定服务器,但是需要服务器能访问到git仓库地址,有些真实环境可能需要堡垒机啥的可能就比较麻烦。
pm2 deploy production update
可能遇到的错误
命令找不到等,原因就是因为我们使用了版本管理nvm导致找不到命令
因为本地执行 pm2 deploy 使用的 ssh 执行远程命令,非交互式环境,需要将 nvm 的配置放到 ~/.bashrc 的头部:
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
然后运行:
$ source ~/.bashrc
PM2下使用 执行npm命令
全局安装pm2
npm install -g pm2
npm run dev
等同于 pm2 start npm -- run dev
npm start
等同于 pm2 start npm -- start
命名进程名
pm2 start npm --name test -- run dev
pm2 start npm --name test -- start
语法:pm2 start npm --watch --name taskname --run scriptname
其中 --watch监听代码变化,--name重命名任务名称,--run后面跟脚本名字